/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.evangelion.core.daoImpl;

import com.evangelion.core.bean.Factura;
import com.evangelion.core.bean.Seccione;
import com.evangelion.core.dao.FacturaDao;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author Kellycasma
 */
public class FacturaDaoImpl extends GenericDaoImpl<Serializable> implements FacturaDao {
    
    @Override
    public List<Factura> searchByMatricula(Seccione seccion, String valorParametro, Date fechaI, Date fechaF) {
        em = getEntityManager();
        Query q = em.createQuery("SELECT f FROM Factura f WHERE f.vehiculo.matricula LIKE :valorParametro AND f.fecha>= :fechaI AND  f.fecha<=:fechaF AND f.seccion=:seccion");
        
        q.setParameter("valorParametro", "%" + valorParametro + "%");
        q.setParameter("fechaI", fechaI);
        q.setParameter("fechaF", fechaF);
        q.setParameter("seccion", seccion);
        
        return q.getResultList();
    }
    
    public Object[] ivaEgresos(Date fechadesde, Date fechahasta, String tipo) {
        em = getEntityManager();
        Object[] obj = new Object[4];
        Query q = null;
        if (tipo.equals("Diario 1")) {
            q = em.createNativeQuery("SELECT sum(haber), iva from movimientos where fecha>=? AND fecha<=? GROUP BY iva ");
        }
        if (tipo.equals("Diario 2")) {
            q = em.createNativeQuery("SELECT sum(haber-descuento_declaracion), iva from movimientos_aux where fecha>=? AND fecha<=? GROUP BY iva ");
        }
        
        q.setParameter(1, fechadesde);
        q.setParameter(2, fechahasta);
        List<Object[]> resultado = q.getResultList();
        System.out.println("resultado.size():" + resultado.size());
        obj[0] = 0.0;
        obj[1] = 0.0;
        obj[2] = 0.0;
        obj[3] = 0.0;
        for (int i = 0; i < resultado.size(); i++) {
            System.out.println("resultado.get(i)[1]" + resultado.get(i)[1]);
            if (((Double) resultado.get(i)[1]) == 0) {
                obj[0] = resultado.get(i)[0];
            }
            if (((Double) resultado.get(i)[1]) == 4) {
                obj[1] = resultado.get(i)[0];
            }
            if (((Double) resultado.get(i)[1]) == 10) {
                obj[2] = resultado.get(i)[0];
            }
            if (((Double) resultado.get(i)[1]) == 21) {
                obj[3] = resultado.get(i)[0];
            }
        }
        return obj;
    }
    
    public Object[] ivaIngresos(Date fechadesde, Date fechahasta, String tipo) {
        em = getEntityManager();
        Object[] obj = new Object[4];
        Query q;
        q = em.createNativeQuery("select SUM(importe) from facturas_alumnos WHERE (servicio='D' or servicio='C') AND fechafactura>=? AND fechafactura<=?");
        q.setParameter(1, fechadesde);
        q.setParameter(2, fechahasta);
        try {
            obj[0] = q.getSingleResult();
            if (obj[0] == null) {
                obj[0] = 0.0;
            }
        } catch (Exception e) {
            System.out.println("error:" + e);
            obj[0] = 0.0;
        }
        if (tipo.equals("Diario 1")) {
            q = em.createNativeQuery("SELECT sum(debe) from movimientos where fecha>=? AND fecha<=?");
        }
        if (tipo.equals("Diario 2")) {
            q = em.createNativeQuery("SELECT sum(debe-descuento_declaracion) from movimientos_aux where fecha>=? AND fecha<=?");
        }
        q.setParameter(1, fechadesde);
        q.setParameter(2, fechahasta);
        try {
            obj[1] = (Double) q.getSingleResult();
            if (obj[1] == null) {
                obj[1] = 0.0;
            }
        } catch (Exception e) {
            obj[1] = 0.0;
        }
        
        obj[2] = 0.0;
        q = em.createNativeQuery("select SUM(importe) from facturas_alumnos WHERE (servicio<>'D' AND servicio<>'C') AND (fechafactura>=? AND fechafactura<=?)");
        q.setParameter(1, fechadesde);
        q.setParameter(2, fechahasta);
        try {
            obj[3] = q.getSingleResult();
            if (obj[3] == null) {
                obj[3] = 0.0;
            }
        } catch (Exception e) {
            obj[3] = 0.0;
        }
        
        
        return obj;
    }
}
